package com.gmall.common.utils;

import io.jsonwebtoken.*;

import java.util.HashMap;
import java.util.Map;
public class JWTUtils {


    /**
     * JWT
     * 第一部分：Header 包含两部分  算法+JWT
     * 第二部分：载荷信息，标准的和自定义
     * iss (issuer)：签发人
     * exp (expiration time)：过期时间
     * sub (subject)：主题
     * aud (audience)：受众
     * nbf (Not Before)：生效时间
     * iat (Issued At)：签发时间
     * jti (JWT ID)：编号
     * 第三部分:签名
     * @param map 自定义部分
     * @return
     */
    private static final long EXPIRITION = 1000 * 60 * 60 * 24  * 7;//7天
    private static final String KEY = "2109A";
    public static String createToken(String userId,String userName){

        Map map = new HashMap();
        map.put("userId",userId);
        map.put("userName",userName);

        String token = Jwts.builder()
                .setClaims(map)//自定义
                .signWith(SignatureAlgorithm.HS256, KEY)
                .compact();

        return token;
    }

    public static Map<String,Object> parseToken(String token){
        Jws<Claims> claimsJws = Jwts
                .parser()
                .setSigningKey(KEY)
                .parseClaimsJws(token);//解析器

        Claims body = claimsJws.getBody();//payload
        return body;
    }

    public static String parseTokenAndGetUserId(String token){
        Map<String, Object> stringObjectMap = parseToken(token);
        String userId = (String)stringObjectMap.get("userId");
        return userId;
    }

    public static void main(String[] args) {
        String token = createToken("zhansgan", "张三");

        System.out.println(token);
        Map<String, Object> stringObjectMap = parseToken(token);
        System.out.println(stringObjectMap);
    }
}
